romlib: Add platform specific jump table list
authorSathees Balya <[email protected]>
Wed, 31 Oct 2018 14:05:08 +0000 (14:05 +0000)
committerSathees Balya <[email protected]>
Tue, 18 Dec 2018 13:55:47 +0000 (13:55 +0000)
This patch allows platforms to define their
own jump table list for library at ROM. The
file has the list of functions to be used
from library at ROM. It can also include
other list files.

Change-Id: I721c35d7dad3dcadbb3a7f3277bfd5d3e1f6e00a
Signed-off-by: Sathees Balya <[email protected]>
Makefile
lib/romlib/Makefile
lib/romlib/gentbl.sh
lib/romlib/genwrappers.sh
lib/romlib/jmptbl.i
plat/arm/board/fvp/jmptbl.i [new file with mode: 0644]
plat/arm/board/juno/jmptbl.i [new file with mode: 0644]

index 9525d411a388706e37acf9dfe381f5329fdac945..5b6bd711ce3a9d874f0609f4e8c0b6b3166faace 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -880,7 +880,7 @@ ${SPTOOL}:
 
 .PHONY: libraries
 romlib.bin: libraries
-       ${Q}${MAKE} BUILD_PLAT=${BUILD_PLAT} INCLUDES='${INCLUDES}' DEFINES='${DEFINES}' --no-print-directory -C ${ROMLIBPATH} all
+       ${Q}${MAKE} PLAT_DIR=${PLAT_DIR} BUILD_PLAT=${BUILD_PLAT} INCLUDES='${INCLUDES}' DEFINES='${DEFINES}' --no-print-directory -C ${ROMLIBPATH} all
 
 cscope:
        @echo "  CSCOPE"
index 00dde31cdcc330721ed39658f8728addaf4b4a79..0e5d447524a19de7aa6859b8fd538ca0d37fd102 100644 (file)
@@ -60,11 +60,16 @@ $(WRAPPER_DIR)/jmpvar.s: $(BUILD_DIR)/romlib.elf
 
 $(LIB_DIR)/libwrappers.a: jmptbl.i $(WRAPPER_DIR)/jmpvar.o
        @echo "  AR      $@"
-       $(Q)./genwrappers.sh -b $(WRAPPER_DIR) -o $@ jmptbl.i
+       $(Q)./genwrappers.sh -b $(WRAPPER_DIR) -o $@ $(BUILD_DIR)/jmptbl.i
 
 $(BUILD_DIR)/jmptbl.s: jmptbl.i
        @echo "  TBL     $@"
-       $(Q)./gentbl.sh -o $@ jmptbl.i
+       if [ -e "../../$(PLAT_DIR)/jmptbl.i" ] ; \
+       then \
+               $(Q)./gentbl.sh -o $@ -b $(BUILD_DIR) ../../$(PLAT_DIR)/jmptbl.i; \
+       else \
+               @echo "USE_ROMLIB=1 requires jump table list file: jmptbl.i in platform directory"; \
+       fi
 
 clean:
        @rm -f $(BUILD_DIR)/*
index 0695f6e4f20d3787451608bda545eb26536d57a2..e64cfe2be318b996895d6b53f89d8a9132f50051 100755 (executable)
@@ -6,6 +6,7 @@
 set -e
 
 output=jmptbl.s
+build=.
 
 for i
 do
@@ -14,27 +15,45 @@ do
                output=$2
                shift 2
                ;;
+       -b)
+               build=$2
+               shift 2
+               ;;
        --)
                shift
                break
                ;;
        -*)
-               echo usage: gentbl.sh [-o output]  file ... >&2
+               echo usage: gentbl.sh [-o output] [-b dir] file ... >&2
                exit 1
                ;;
        esac
 done
 
 tmp=`mktemp`
-trap "rm -f $tmp" EXIT INT QUIT
-
+trap "rm -f $$.tmp" EXIT INT QUIT
 rm -f $output
 
+# Pre-process include files
+awk '!/^$/ && !/[:blank:]*#.*/{
+if (NF == 2 && $1 == "include") {
+       while ((getline line < $2) > 0)
+               if (line !~ /^$/ && line !~ /[:blank:]*#.*/)
+                       print line
+               close($2)
+} else
+       print
+}' "$@" |
+awk -v OFS="\t" '
+BEGIN{print "#index\tlib\tfunction\t[patch]"}
+{print NR-1, $0}' | tee $build/jmptbl.i |
 awk -v OFS="\n" '
 BEGIN {print "\t.text",
              "\t.globl\tjmptbl",
              "jmptbl:"}
       {sub(/[:blank:]*#.*/,"")}
-!/^$/ {print "\tb\t" $3}' "$@" > $tmp
-
-mv $tmp $output
+!/^$/ {if ($3 == "reserved")
+               print "\t.word\t0x0"
+       else
+               print "\tb\t" $3}' > $$.tmp &&
+mv $$.tmp $output
index 48ee5a43b438ace4753aaa96766ccdf40dc01bd6..746e4ba9f4b071cdcae3f764dceea848617e31de 100755 (executable)
@@ -31,7 +31,7 @@ do
 done
 
 awk  '{sub(/[:blank:]*#.*/,"")}
-!/^$/ && !/\\tpatch$/ {print $1*4, $2, $3}' "$@" |
+!/^$/ && !/\\tpatch$/ !/\\treserved$/ {print $1*4, $2, $3}' "$@" |
 while read idx lib sym
 do
        file=$build/${lib}_$sym
index 5eca5aab30c1ebcf0bc855ca8b8096494954a804..a7280d0d6649662933f3a32fea00dd30a90fa5a9 100644 (file)
@@ -4,37 +4,40 @@
 # SPDX-License-Identifier: BSD-3-Clause
 #
 # Format:
-# index        lib     function        [patch]
+# lib  function        [patch]
 # Add "patch" at the end of the line to patch a function. For example:
-# 14   mbedtls mbedtls_memory_buffer_alloc_init        patch
+# mbedtls      mbedtls_memory_buffer_alloc_init        patch
+# Holes can be introduced in the table by using a special keyword "reserved".
+# Example:
+# reserved     reserved
+# The jump table will contain an invalid instruction instead of branch
 
-0      rom     rom_lib_init
-1      fdt     fdt_getprop_namelen
-2      fdt     fdt_setprop_inplace
-3      fdt     fdt_check_header
-4      fdt     fdt_node_offset_by_compatible
-5      mbedtls mbedtls_asn1_get_alg
-6      mbedtls mbedtls_asn1_get_alg_null
-7      mbedtls mbedtls_asn1_get_bitstring_null
-8      mbedtls mbedtls_asn1_get_bool
-9      mbedtls mbedtls_asn1_get_int
-10     mbedtls mbedtls_asn1_get_tag
-11     mbedtls mbedtls_free
-12     mbedtls mbedtls_md
-13     mbedtls mbedtls_md_get_size
-14     mbedtls mbedtls_memory_buffer_alloc_init
-15     mbedtls mbedtls_oid_get_md_alg
-16     mbedtls mbedtls_oid_get_numeric_string
-17     mbedtls mbedtls_oid_get_pk_alg
-18     mbedtls mbedtls_oid_get_sig_alg
-19     mbedtls mbedtls_pk_free
-20     mbedtls mbedtls_pk_init
-21     mbedtls mbedtls_pk_parse_subpubkey
-22     mbedtls mbedtls_pk_verify_ext
-23     mbedtls mbedtls_platform_set_calloc_free
-24     mbedtls mbedtls_platform_set_snprintf
-25     mbedtls mbedtls_x509_get_rsassa_pss_params
-26     mbedtls mbedtls_x509_get_sig_alg
-27     mbedtls mbedtls_md_info_from_type
-28     c       exit
-29     c       atexit
\ No newline at end of file
+rom    rom_lib_init
+fdt    fdt_getprop_namelen
+fdt    fdt_setprop_inplace
+fdt    fdt_check_header
+fdt    fdt_node_offset_by_compatible
+mbedtls        mbedtls_asn1_get_alg
+mbedtls        mbedtls_asn1_get_alg_null
+mbedtls        mbedtls_asn1_get_bitstring_null
+mbedtls        mbedtls_asn1_get_bool
+mbedtls        mbedtls_asn1_get_int
+mbedtls        mbedtls_asn1_get_tag
+mbedtls        mbedtls_free
+mbedtls        mbedtls_md
+mbedtls        mbedtls_md_get_size
+mbedtls        mbedtls_memory_buffer_alloc_init
+mbedtls        mbedtls_oid_get_md_alg
+mbedtls        mbedtls_oid_get_numeric_string
+mbedtls        mbedtls_oid_get_pk_alg
+mbedtls        mbedtls_oid_get_sig_alg
+mbedtls        mbedtls_pk_free
+mbedtls        mbedtls_pk_init
+mbedtls        mbedtls_pk_parse_subpubkey
+mbedtls        mbedtls_pk_verify_ext
+mbedtls        mbedtls_platform_set_snprintf
+mbedtls        mbedtls_x509_get_rsassa_pss_params
+mbedtls        mbedtls_x509_get_sig_alg
+mbedtls        mbedtls_md_info_from_type
+c      exit
+c      atexit
diff --git a/plat/arm/board/fvp/jmptbl.i b/plat/arm/board/fvp/jmptbl.i
new file mode 100644 (file)
index 0000000..8d232d5
--- /dev/null
@@ -0,0 +1,17 @@
+#
+# Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# Platform specific romlib functions can be added or included here.
+# The index in the output file will be generated cumulatively in the same
+# order as it is given in this file.
+# Output file can be found at: $BUILD_DIR/jmptbl.i
+#
+# Format:
+# lib  function        [patch]
+# Example:
+# rom  rom_lib_init
+# fdt  fdt_getprop_namelen     patch
+
+include ../../lib/romlib/jmptbl.i
diff --git a/plat/arm/board/juno/jmptbl.i b/plat/arm/board/juno/jmptbl.i
new file mode 100644 (file)
index 0000000..8d232d5
--- /dev/null
@@ -0,0 +1,17 @@
+#
+# Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# Platform specific romlib functions can be added or included here.
+# The index in the output file will be generated cumulatively in the same
+# order as it is given in this file.
+# Output file can be found at: $BUILD_DIR/jmptbl.i
+#
+# Format:
+# lib  function        [patch]
+# Example:
+# rom  rom_lib_init
+# fdt  fdt_getprop_namelen     patch
+
+include ../../lib/romlib/jmptbl.i